package org.fujay.langchain4jserver.application.service;

import org.fujay.langchain4jserver.application.command.CreateModelCommand;
import org.fujay.langchain4jserver.application.command.UpdateModelCommand;
import org.fujay.langchain4jserver.application.dto.ModelConnectionTestResultDTO;
import org.fujay.langchain4jserver.application.dto.ModelDTO;
import org.fujay.langchain4jserver.application.dto.ModelSummaryDTO;
import org.fujay.langchain4jserver.domain.model.vo.ModelId;

import java.util.List;
import java.util.Optional;

/**
 * 模型应用服务接口
 */
public interface ModelService {

    /**
     * 创建新模型
     *
     * @param command 创建模型命令对象
     * @return 创建的模型 DTO
     */
    ModelDTO createModel(CreateModelCommand command);

    /**
     * 获取模型详情
     *
     * @param modelId 模型ID
     * @return 模型 DTO Optional
     */
    Optional<ModelDTO> getModel(ModelId modelId);

    /**
     * 列出所有模型
     *
     * @return 模型概要 DTO 列表
     */
    List<ModelSummaryDTO> listModels();

    /**
     * 更新模型信息
     *
     * @param command 更新模型命令对象
     * @return 更新后的模型 DTO (可选)
     */
    Optional<ModelDTO> updateModel(UpdateModelCommand command);

    /**
     * 删除模型
     *
     * @param modelId 模型ID
     */
    void deleteModel(ModelId modelId);

    /**
     * 启用模型
     *
     * @param modelId 模型ID
     * @return 更新后的模型 DTO (可选)
     */
    Optional<ModelDTO> enableModel(ModelId modelId);

    /**
     * 禁用模型
     *
     * @param modelId 模型ID
     * @return 更新后的模型 DTO (可选)
     */
    Optional<ModelDTO> disableModel(ModelId modelId);

    /**
     * 测试模型连接
     *
     * @param modelId 模型ID
     * @return 连接测试结果 DTO
     */
    ModelConnectionTestResultDTO testModelConnection(ModelId modelId);
}
